--- dwm.c
+++ dwm.c
@@ -70,6 +70,7 @@ static void focusmon(const Arg *arg);
 static void focusstack(const Arg *arg);
 static Atom getatomprop(Client *c, Atom prop);
 static int getdwmblockspid();
+static void drawstatusbar(Monitor *m, int tw);
 static void getfloatpos(Client *c, char *buf);
 static int getrootptr(int *x, int *y);
 static long getstate(Window w);
@@ -514,6 +515,7 @@ drawbar(Monitor *m)
 {
     int x, w, tw = 0;
     int boxs = drw->fonts->h / 9;
+    int boxw = drw->fonts->h / 6 + 2;
     unsigned int i, occ = 0, urg = 0;
     Client *c;
     int leftw;
@@ -525,17 +527,42 @@ drawbar(Monitor *m)
         tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
     }
 
+    drawstatusbar(m, tw);
+
     for (c = m->clients; c; c = c->next) {
         occ |= c->tags;
         if (c->isurgent)
             urg |= c->tags;
     }
 
-    /* draw tags */
-    x = 0;
+    leftw = 0;
     for (i = 0; i < LENGTH(tags); i++) {
         w = TEXTW(tags[i]);
         drw_text(drw, leftw, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
-        x += w;
+        leftw += w;
     }
 
+    /* draw layout symbol */
+    w = TEXTW(m->ltsymbol);
+    drw_text(drw, leftw, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
+    leftw += w;
+
+    leftw += 2; /* additional spacing */
+
+    if ((w = m->ww - tw - leftw) > bh) {
+        if (m->sel) {
+            drw_setscheme(drw, scheme[m->sel->isfloating ? SchemeSel : SchemeNorm]);
+            drw_text(drw, leftw, 0, w, bh, lrpad / 2, m->sel->name, 0);
+            drawstateindicator(m, m->sel, 1, leftw, 0, w, bh, 0, 0, 1);
+        } else {
+            drw_setscheme(drw, scheme[SchemeNorm]);
+            drw_text(drw, leftw, 0, w, bh, lrpad / 2, NULL, 0);
+        }
+    }
+
+    drw_map(drw, m->barwin, 0, 0, m->ww, bh);
+}
+
+void
+drawstatusbar(Monitor *m, int tw)
+{
